android 权限申请PermissionUtil | 您所在的位置:网站首页 › recognition to sb › android 权限申请PermissionUtil |
android 权限申请–在activity之外申请权限
1、android 权限申请工具类库
在申请权限时,最不爽的是权限申请结果的回调在activity中,如果在其他地方需要使用危险权限时非常不方便。为了解决这个问题,本类库中在申请权限时,会启动一个透明的activity—PermissionActivity,系统的回调在PermissionActivity中处理,然后在回调给使用的地方,并销毁 PermissionActivity。 特点: 可以在任意地方发起权限申请;可以统一处理权限回调;新增维护一个请求队列,依次处理请求,在连续多次发起请求时,不会造成回调冲突。已经拥有申请的全部权限或api版本小于23,都会返回申请成功。 2、效果申请时拒绝,拒绝后会回调被拒绝的权限,可以对被拒绝的权限进行说明,并重新申请。 注册权限 要申请的权限 final String[] permission= new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA, Manifest.permission.READ_PHONE_STATE};要申请权限的回调 PermissionCallback callback=new PermissionCallback() { @Override public void onPermissionGranted() { toast("权限申请成功--方式1"); } @Override public void shouldShowRational(final RequestBean requestBean,String[] rationalPermissons, final boolean before) { StringBuilder sb=new StringBuilder(); sb.append("我们将获取以下权限:\n\n"); for(int i=0;i sb.append("读写设备外部存储空间的权限,将被用于获取用户头像、保存一些文件到项目文件夹中"); }else if(Manifest.permission.CAMERA.equals(rationalPermissons[i])){ sb.append("使用摄像头的权限将,被用于拍照获取用户头像,直播视频采集"); }else if(Manifest.permission.READ_PHONE_STATE.equals(rationalPermissons[i])){ sb.append("读取手机状态信息的权限,将被用于登录时账号验证"); }else if(Manifest.permission.RECORD_AUDIO.equals(rationalPermissons[i])){ sb.append("录制引起的权限,将被用于直播音频采集"); } if(i==rationalPermissons.length-1){ sb.append("。"); }else{ sb.append(";"); } sb.append("\n"); } PermissionUtil.showDialog(MainActivity.this, sb.toString(), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); //重新申请权限 PermissionUtil.requestAgain(MainActivity.this,requestBean); } }); } @Override public void onPermissonReject(String[] rejectPermissons) { StringBuilder sb=new StringBuilder(); sb.append("我们需要的权限:\n\n"); for(int i=0;i sb.append("读写外部存储空间的权限,将被用于获取用户头像、保存一些文件到项目文件夹中"); }else if(Manifest.permission.CAMERA.equals(rejectPermissons[i])){ sb.append("使用摄像头的权限,被用于拍照获取用户头像,直播视频采集"); }else if(Manifest.permission.READ_PHONE_STATE.equals(rejectPermissons[i])){ sb.append("读取手机状态信息的权限,将被用于登录时账号验证"); }else if(Manifest.permission.RECORD_AUDIO.equals(rejectPermissons[i])){ sb.append("录制引起的权限,将被用于直播音频采集"); } if(i==rejectPermissons.length-1){ sb.append("。"); }else{ sb.append(";"); } sb.append("\n"); } sb.append("\n被设为禁止,请到设置里开启权限"); PermissionUtil.showDialog(MainActivity.this, sb.toString(), getString(R.string.dialog_cancel), getString(R.string.dialog_go_setting), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); //重新申请权限 PermissionUtil.startSettingsActivity(MainActivity.this); } } ); } };发起权限申请 PermissionUtil.request(MainActivity.this,permission,callback); 4、使用方式二:统一处理失败回调在权限申请前设置统一回调,比如application里面 /** 申请失败的回调,整个app只需设置一次,统一在一个地方处理 */ PermissionUtil.setFailedCallBack(new FailedCallBack() { @Override public void shouldShowRational(final RequestBean requestBean,String[] rationalPermissons, boolean before) { StringBuilder sb=new StringBuilder(); sb.append("我们需要获取以下权限:\n\n"); for(int i=0;i sb.append("读写设备外部存储空间的权限,将被用于获取用户头像、保存一些文件到项目文件夹中"); }else if(Manifest.permission.CAMERA.equals(rationalPermissons[i])){ sb.append("使用摄像头的权限,将被用于拍照获取用户头像,直播视频采集"); }else if(Manifest.permission.READ_PHONE_STATE.equals(rationalPermissons[i])){ sb.append("读取手机状态信息的权限,将被用于登录时账号验证"); }else if(Manifest.permission.RECORD_AUDIO.equals(rationalPermissons[i])){ sb.append("录制引起的权限,将被用于直播音频采集"); } if(i==rationalPermissons.length-1){ sb.append("。"); }else{ sb.append(";"); } sb.append("\n"); } //弹出提示dialog PermissionUtil.showDialog(MainActivity.this, sb.toString(), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); //重新申请权限 PermissionUtil.requestAgain(MainActivity.this,requestBean); } }); } @Override public void onPermissonReject(String[] rejectPermissons) { StringBuilder sb=new StringBuilder(); sb.append("我们需要的权限:\n\n"); for(int i=0;i sb.append("读写外部存储空间的权限,将被用于获取用户头像、保存一些文件到项目文件夹中"); }else if(Manifest.permission.CAMERA.equals(rejectPermissons[i])){ sb.append("使用摄像头的权限,被用于拍照获取用户头像,直播视频采集"); }else if(Manifest.permission.READ_PHONE_STATE.equals(rejectPermissons[i])){ sb.append("读取手机状态信息的权限,将被用于登录时账号验证"); }else if(Manifest.permission.RECORD_AUDIO.equals(rejectPermissons[i])){ sb.append("录制引起的权限,将被用于直播音频采集"); } if(i==rejectPermissons.length-1){ sb.append("。"); }else{ sb.append(";"); } sb.append("\n"); } sb.append("\n被设为禁止,请到设置里开启权限"); //弹出提示dialog PermissionUtil.showDialog(MainActivity.this, sb.toString(), getString(R.string.dialog_cancel), getString(R.string.dialog_go_setting), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); //重新申请权限 PermissionUtil.startSettingsActivity(MainActivity.this); } } ); } });权限申请时设置成功的回调 /** 申请结果处理方式二 */ findViewById(R.id.text_view02).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //申请权限 PermissionUtil.request(MainActivity.this, permission, new SuccessCallback(){ @Override public void onPermissionGranted() { toast("权限申请成功--方式2"); } }); } 5、源码github 喜欢的小伙伴点下star 哈哈。 github慢也可以下载压缩包 |
CopyRight 2018-2019 实验室设备网 版权所有 |